package com.study.d024chart;

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Side;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.scene.chart.PieChart.Data;
import javafx.scene.control.Button;
import javafx.scene.control.Tooltip;
import javafx.scene.effect.BlendMode;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

/**Chart接口 之子类PieChart 饼状图类
*@description
*@author xtayhame
*date 2020年3月17日
*version
*since v1.0
*/
public class PieChartMain extends Application{
	public static void main(String[] args) {
		launch(args);
	}
	@Override
	public void start(Stage stage) throws Exception {
		//数据
		ObservableList<PieChart.Data> datas=FXCollections.observableArrayList();
		PieChart.Data d1= new PieChart.Data("衣服", 40);
		PieChart.Data d2= new PieChart.Data("电脑", 80);
		PieChart.Data d3= new PieChart.Data("水果", 100);
		PieChart.Data d4= new PieChart.Data("汽车", 60);
		PieChart.Data d5= new PieChart.Data("钢材", 90);

		datas.addAll(d1,d2,d3,d4,d5);

		AnchorPane anchorPane = new AnchorPane();
		Button b1 = new Button("点击");
		PieChart chart= new PieChart();
		chart.setData(datas);

		//设置标题
		chart.setTitle("关于产品的分类");

		//设置宽高
		chart.setPrefSize(400, 400);
		//数据更新时，是否动画显示，默认为true
		chart.setAnimated(true);

		//设置颜色混合模式   BlendMode.DARKEN 为默认
		chart.setBlendMode(BlendMode.DARKEN);

		//设置饼图中 线的长度
		chart.setLabelLineLength(1);

		//设置饼图上的标签是否可见  默认true
		chart.setLabelsVisible(true);

		//设置分类标题的显示位置
		chart.setLegendSide(Side.LEFT);

		//设置标题的位置
		chart.setTitleSide(Side.BOTTOM);


		anchorPane.getChildren().addAll(b1,chart);
		AnchorPane.setTopAnchor(b1, 10.0);
		AnchorPane.setLeftAnchor(b1, 20.0);

		AnchorPane.setTopAnchor(chart, 20.0);
		AnchorPane.setLeftAnchor(chart, 20.0);

		stage.setScene(new Scene(anchorPane, 600, 500));
		stage.show();

		//给每个部分添加提示信息
		ObservableList<Data>  lists=chart.getData();
		if(lists !=null && lists.size() > 0){
			for(Data d:lists){
				Node node=d.getNode();
				Tooltip tip = new Tooltip("当前值是："+d.getPieValue());
				Tooltip.install(node, tip);

				d.pieValueProperty().addListener(new ChangeListener<Number>() {

					@Override
					public void changed(ObservableValue<? extends Number> observable, Number oldValue,
							Number newValue) {
						System.out.println("更新的值是：" + newValue.doubleValue());

					}
				});

				node.setOnMouseClicked(new EventHandler<MouseEvent>() {

					@Override
					public void handle(MouseEvent event) {
						System.out.println("当前点击的是:" + d.getName() + "   -" +d.getPieValue() );
					}
				});
			}
		}

		b1.setOnAction(new EventHandler<ActionEvent>() {

			@Override
			public void handle(ActionEvent event) {
				d1.setPieValue(120);
			}
		});
	}
}
